![]() |
|
|
Zanka whileNaloga 2 (stran 52)Naloga zasnovana na nalogi https://lusy.fri.uni-lj.si/ucbenik/book/1203/index9.html 1. podnalogaNapišite program, ki te vpraša po nizu z Primer:
Uradna rešitev#
niz = input("Vnesi niz: ")
i = 1
while i <= 10:
print(niz)
i += 1
2. podnalogaDopolni ta program tako, da te najprej vpraša po celem številu Primer:
Uradna rešitev#
n = int(input("Vpiši poljubno celo število: "))
niz = input("Vpiši niz: ")
i = 1
while i <= n:
print(niz)
i += 1
Naloga 5 (stran 52)https://lusy.fri.uni-lj.si/ucbenik/book/1203/index9.html 1. podnalogaNaslednji program naj bi prebral števili
Uradna rešiteva = int(input("Vnesi a: "))
b = int(input("Vnesi b: "))
vsota = 0
while a <= b:
vsota = vsota + a
a = a + 1
print(vsota)
Podražitve1. podnalogaNek izdelek naj bi se vsak teden podražil za 2%. Da bi razumeli, kaj to
pomeni, napišite funkcijo Za šaljivce, ki bodo funkcijo poklicali z negativno ceno ali ceno 0, vrnite -1. Uradna rešitevdef koliko_tednov(cena):
"""Koliko tednov traja, da ceno ob
2% podražitvi preseže 1000€"""
if cena <= 0: # odpravimo šaljivce
return -1
# smiselni podatki, računamo ...
koncna_cena = 1000
trenutna_cena = cena
tednov = 0
while trenutna_cena < koncna_cena:
trenutna_cena = trenutna_cena * 1.02
tednov += 1 # to je isto kot tednov = tednov + 1
return tednov
Bakterije1. podnalogaBakteriolog Bine preučuje bakterije. Naredil je sledeči poizkus:
bakterije je zaprl v škatlico pravokotne oblike s pregrado na sredini,
ki razdeli škatlico na dva kvadratna dela - poimenujmo ju Pozor! Premislite, kaj se dogaja na pregradi! Za začetni masi
zato bi program izpisal
Uradna rešitev# Določimo število tednov, ko se ustrezno zmanjša začetna porazdelitev bakterij
masa_A = float(input('Masa v regiji A: '))
masa_B = float(input('Masa v regiji B: '))
korak = 0
while masa_A + masa_B >= 0.001: # skupna teža je še prevelika
stara_A = masa_A # potrebovali bomo za izračun B-ja
masa_A = masa_A * 0.12 # toliko jih ostane
masa_A = masa_A + masa_B * 0.22 # toliko jih pa še pride iz B
masa_B = masa_B * 0.12
masa_B = masa_B + stara_A * 0.22
korak += 1 # en korak več
print('Korakov:', korak)
Čaramo s celimi števili1. podnalogaSestavite funkcijo Tisti, ki že poznate funcije in metode za delo z nizi, teh prijemov tukaj ne smete uporabiti. V tej nalogi torej nikjer ne smemo uporabljati nizov! Uradna rešitevdef obrni_stevilo(n):
"""Funkcija obrne pozitivno celo število"""
if n < 0:
return 0
obrnjeno = 0
while n > 0:
obrnjeno = obrnjeno * 10 + n % 10
n = n // 10
return obrnjeno
2. podnalogaNajprej si oglejte naslednjo funkcijo. Ugotovite, kaj počne. Očitno jo je pisal nek programer začetnik, kar lahko zlahka ugotovimo po odsotnosti komentarjev in izbiri imen spremenljivk.
Namig: pokličite jo s parametri Oboroženi z vedenjem o zgornji funkciji
sestavite funkcijo
Namig: kako delimo "peš"? Uradna rešitevdef kvocient(a, b, n):
"""Izračunamo a/b na n decimalk (za dec. piko)"""
celi_del = a // b
rezultat = str(celi_del) + '.'
delimo = a % b # koliko še ostane
decimalke = 0
while decimalke < n: # koliko decimalk potrebujemo
delimo = delimo * 10
nova_dec = delimo // b
rezultat = rezultat + str(nova_dec) # dodamo decimalko
decimalke = decimalke + 1 # je ena več
delimo = delimo % b # za naslednji korak
return rezultat
3. podnalogaProgramer Mihec je sestavil funkcijo
Preizkusil jo je na storitvi Projekt Tomo, a je kar naprej dobival obvestila o napačnem rezultatu. Preizkusite jo še vi in jo ustrezno popravite! Uradna rešitevdef vsebuje(stevilo, k):
""" ali število stevilo vsebuje števko k """
if (stevilo == 0) and (k == 0):
return True
stevilo = abs(stevilo) # zaradi neg. števil!
while stevilo > 0:
if stevilo % 10 == k:
return True
stevilo = stevilo // 10
return False
4. podnalogaSestavite funkcijo Uradna rešitevdef prestej_vsebuje(a, b, k):
""" prešteje koliko je med a in b števil, ki vsebujejo števko k """
mini = min(a, b)
maksi = max(a, b)
stevilo = mini
koliko = 0 # koliko jih zadošča pogoju
while stevilo <= maksi:
if vsebuje(stevilo, k):
koliko += 1
stevilo = stevilo + 1
return koliko
5. podnalogaSestavite funkcijo Uradna rešitevdef vsebuje(stevilo, k):
""" ali število stevilo vsebuje števko k """
if stevilo == k == 0 :
return True
while stevilo > 0:
if stevilo % 10 == k:
return True
stevilo = stevilo // 10
return False
def obrni_stevilo(n):
""" Funkcija obrne pozitivno celo število"""
obrnjeno = 0
while n > 0:
obrnjeno = obrnjeno * 10 + n % 10
n = n // 10
return obrnjeno
def prestej_prave(a, b, k):
""" prešteje koliko je med a in b števil, ki zadoščajo pogoju k """
stevilo = a
koliko = 0 # koliko jih zadošča pogoju
while stevilo <= b:
if vsebuje(stevilo, k) or stevilo % k == 0 or obrni_stevilo(stevilo) % k == 0:
koliko += 1
stevilo = stevilo + 1
return koliko
Čokolade1. podnalogaJanezek ima nekaj čokolad. Prvi dan poje Napišite funkcijo Pomagaš si lahko z uporabo
Uradna rešitevdef cokolade(st_cokolad, n):
"""Funkcija vrne število čokolad, ki jih dobi dedek"""
dan = 1
while st_cokolad > 0:
if st_cokolad < dan: #če je število čokolad manj kot je število dni
break
st_cokolad -= n*(2**(dan - 1))
if st_cokolad < 0: #če je število čokolad negativno je Janezek pojedel vse
st_cokolad = 0 #v tem primeru dedek ne dobi nič
dan += 1
return st_cokolad
2. podnalogaJanezek pa je kmalu ugotovil, da dedek nebo dobil skoraj nič čokolad, zato se je odločil, da bo dal vsak dan eno čokolado na stran za svojega prijaznega dedka preden jih začne jesti. Napišite funkcijo Pomagaš si lahko z uporabo
Uradna rešitevdef cokolade2(st_cokolad, n):
"""Funkcija vrne število čokolad, ki jih dobi dedek"""
dan = 1
za_dedka = 0
while st_cokolad > 0:
za_dedka += 1
st_cokolad -= 1
if st_cokolad < dan: #če je število čokolad manj kot je število dni
break
st_cokolad -= n*(2**(dan - 1))
if st_cokolad < 0: #če je število čokolad negativno je Janezek pojedel vse
st_cokolad = 0 #v tem primeru dedek ne dobi nič
dan += 1
return st_cokolad + za_dedka
Mečemo kocko1. podnalogaSestavite funkcijo
smo torej kocko morali vreči 9x, da smo dvakrat zapored vrgli 6. Pomagajte si
s knjižnico Uradna rešitevimport random
def dvakrat_zapored():
""""Koliko metov je potrebnih, da dvakrat zapored vržemo 6"""
število_metov = 0
prejšni_met = 42 # koliko smo vrgli v prejšnem metu (karkoli razen 6!)
while True : # kar neskončna zanka, izstopili bomo z return
met = random.randint(1,6)
število_metov += 1
if (met == 6) and (prejšni_met == 6):
return število_metov
prejšni_met = met
# še drugačna različica, brez break in while True
def dvakrat_zapored():
"""Koliko metov je potrebnih, da dvakrat zapored vržemo 6"""
met = random.randint(1,6) # opravimo prvi met
števec = 1
prejšnji_met = 2 # karkoli, le 6 ne!!
while not (prejšnji_met == 6 and met == 6):
prejšnji_met = met
met = random.randint(1,6) # novi met
števec = števec + 1
return števec
2. podnalogaSestavite funkcijo Uradna rešitevimport random
def pricakovana_vrednost_dveh6(st_poskusov):
'''Povprečje metov, potrebnih da dvakrat zaporedoma
vržemo 6 v n poskusih '''
skupno_št_metov = 0
poskus = 1
while poskus <= st_poskusov:
število_metov = dvakrat_zapored() # opravimo eno poskus
skupno_št_metov = skupno_št_metov + število_metov
poskus = poskus + 1
# povprečje
return skupno_št_metov / st_poskusov
Igra ugibanj1. podnalogaMamica in lukec se igrata igro ugibanj. Mamica ima na mizi 5 posode oštevilčene z 1, 2, 3, 4 in 5. Mamica Lukcu naključno skrije en bonbon v eno škatlo, lukec pa naključno ugotavlja, kam ga je skrila. Če ugotovi pravilno ga dobi in mamica skrije nov bonbon, če ne pa ne in Lukec nadaljuje z ugibanjem. Sestavite funkcijo Uradna rešitevimport random
def igraUgibanj():
'''funkcija simulira skrivanje in ugibanje ter vrne število bonbonov, ki
jih je Lukec dobil'''
stBonbonov = 0
stPoskusov = 0
while stPoskusov != 10:
vKateriSkatli = random.randint(1, 5)
while stPoskusov != 10:
ugibanje = random.randint(1, 5)
stPoskusov += 1
if ugibanje == vKateriSkatli:
stBonbonov += 1
break
return stBonbonov
2. podnalogaMamici je kmalu postalo dolgčas, zato je lukcu začela skrivati 3 bonbone naenkrat. Lukec ugotavlja dokler ne najde vseh treh, nato mu mamica skrije nove 3. Kar pa Lukec ne ve je to, da mu je mamica vedno skrila vse tri bonbonr v isto naključno škatlo. Sestavite funkcijo Uradna rešitevimport random
def igraUgibanj2():
'''funkcija simulira skrivanje in ugibanje ter vrne število bonbonov, ki
jih je Lukec dobil'''
stBonbonov = 0
stPoskusov = 0
while stPoskusov != 10:
vKateriSkatli = random.randint(1, 5)
kolikoSeSkritih = 3
while stPoskusov != 10:
ugibanje = random.randint(1, 5)
stPoskusov += 1
if ugibanje == vKateriSkatli:
stBonbonov += 1
kolikoSeSkritih -= 1
if kolikoSeSkritih == 0:
break
return stBonbonov
Mesto objave ob koncu projekta 15.9.2018
|